/**
 * 五个火把围成一圈，ABCDE，点燃一个就需要把不相邻的两个的状态进行一个翻转
 * 例如点燃A，就需要翻转CD
 * 给定两个状态，问转换的最少步数
 * 显然状压加Floyd
 */
#include <bits/stdc++.h>
using namespace std;

#include <bits/extc++.h>
using namespace __gnu_pbds;

using llt = long long;
using pii = pair<int, int>;
using vi = vector<int>;
using vvi = vector<vi>;

const int XOR[] = {
    0x0D, 0x1A, 0x15, 0x0B, 0x16 
};

vvi G;

void init(){
    int n = 1 << 5;
    G.assign(n, vi(n, -1));
    for(int i=0;i<n;++i){
        G[i][i] = 0;
        auto st = i;
        for(int ns, j=0;j<5;++j){
            if((st & (1 << j)) == 0){
                ns = st ^ XOR[j];
                G[st][ns] = 1;                
            }
        }
    }

    for(int k=0;k<n;++k)for(int i=0;i<n;++i)for(int j=0;j<n;++j){
        if(-1 == G[i][k] or -1 == G[k][j]) continue;
        auto tmp = G[i][k] + G[k][j];
        if(-1 == G[i][j]) G[i][j] = tmp;
        else G[i][j] = min(G[i][j], tmp);
    }

    return;
}


int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    init();
    int nofkase = 1;
    cin >> nofkase;
    while(nofkase--){
        array<int, 5> a;
        for(auto & i : a) cin >> i;
        int s = 0;
        for(int i=4;i>=0;--i) s = (s << 1) | a[i];
        for(auto & i : a) cin >> i;
        int t = 0;
        for(int i=4;i>=0;--i) t = (t << 1) | a[i];
        auto ans = G[s][t];
        cout << ans << "\n";
    }
    return 0;
}